package org.gwt.client.vista;

import java.util.LinkedList;
import java.util.List;

import org.gwt.client.controlador.BotonListener;
import org.gwt.client.vista.iconos.Iconos;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.google.gwt.core.client.GWT;

public class BarraDibujo extends VerticalPanel{

	private static final int BOTON_PUNTO = 1;
	private static final int BOTON_VECTOR = 2;
	private static final int BOTON_PLANO = 3;

	private Button botonPunto;
	private Button botonVector;
	private Button botonPlano;
	private Button botonAyuda;

	private List<BotonListener> listeners;
	private BotonListener botonListenerAyuda;
	private LayoutContainer layoutContainer;

	public BarraDibujo() {

		Iconos ICONS = GWT.create(Iconos.class);

		setSpacing(10);
		setBorders(true);
		setStyleName("fondoBlanco");
		setHorizontalAlign(HorizontalAlignment.CENTER);

		botonPunto = new Button();
		botonVector = new Button();
		botonPlano = new Button();
		botonAyuda = new Button();

		botonPunto.setIcon(ICONS.punto());
		botonVector.setIcon(ICONS.vector());
		botonPlano.setIcon(ICONS.planoH());
		botonAyuda.setIcon(ICONS.ayuda());

		botonPunto.setToolTip("Dibuje un punto");
		botonVector.setToolTip("Dibuje un vector");
		botonPlano.setToolTip("Dibuje un plano");
		botonAyuda.setToolTip("Solicite Ayuda");

		botonPunto.setSize("48", "50");
		botonVector.setSize("48", "50");
		botonPlano.setSize("48", "50");
		botonAyuda.setSize("48", "50");

		add(botonPunto);
		add(botonVector);
		add(botonPlano);

		layoutContainer = new LayoutContainer();
		add(layoutContainer);
		layoutContainer.setSize("10", "350");
		add(botonAyuda);


		listeners = new LinkedList<BotonListener>();
		inicializarAccionesDeBoton();
		inicializarBotonAyuda();
	}

	private void inicializarAccionesDeBoton() {
		botonPunto.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				for(BotonListener listener: listeners)
					listener.botonEvent(BOTON_PUNTO);
			}
		});

		botonVector.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				for(BotonListener listener: listeners)
					listener.botonEvent(BOTON_VECTOR);
			}
		});

		botonPlano.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				for(BotonListener listener: listeners)
					listener.botonEvent(BOTON_PLANO);
			}
		});

	}

	private void inicializarBotonAyuda() {
		botonAyuda.addSelectionListener(new SelectionListener<ButtonEvent>() {
			public void componentSelected(ButtonEvent ce) {
				botonListenerAyuda.botonAyudaEvent();
			}
		});
	}

	public void addListener(BotonListener listener) {
		listeners.add(listener);
	}

	public void removeListener(BotonListener listener) {
		listeners.remove(listener);
	}

	public void addBotonListener(BotonListener listener){
		botonListenerAyuda = listener;
	}

	public void removeBotonListener(BotonListener listener){
		botonListenerAyuda = null;
	}
}